Software
RaspberryPi
元に戻る

Python Device Control  2024/11/04

本文目次

本文以外目次
1.PythonでI/O機器のコントロール  (作業中)
 (1)出力 LED点滅
 (2)入力
 (3)DS18B20 1ワイヤー 温度
2.PythonでI2C機器のコントロール
 (1)i2cディバイスの接続
 (2)モジュールsmbusでi2cのプログラム例
 (3)ADS1115 A/D変換器使用例
 (4)INA226 電圧電流測定使用例
 (5)BME280 気温、湿度、大気圧使用例
 (6)BH1750 照度使用例
 (7)DS3231 時計使用例
 (8)SSD1306 モニター使用例
3.Pythonでシリアル通信機器のコントロール(作業中)
4.PythonでModBus機器のコントロール  (作業中)
5.PythonでMySQLのコントロール  (作業中)
6.PythonでHTMLのコントロール  (作業中)
7.Pythonでmailのコントロール  (作業中)
■RaspberryPi
 (1)RaspberryPi Hardware
 (2)RaspberryPi OS Install & I/Otest
 (3)RaspberryPi Programming
 (4)RaspberryPi Shell Commands sed
 (5)RaspberryPi Shell Commands i2ctools
■Python (プログラム言語)
 (1)Python_Start
 (2)Python_Library
 (3)Python Module SMBus
 (4)PythonPackageInstaller pip
■その他
 (1)正規表現
 (2)ASCIIコード

本   文
1.PythonでI/O機器のコントロール
(1)出力 LED点滅
  RaspberrPi I/Oの事前設定
 Pythonの標準モジュールgpiozeroを使用してI/Oピンを制御する。
■LEDの電流計算と接続
RaspberryPiの1ピンの最大電流は16(mA)なのでこれ以下にする必要がある。
試験回路の電流を4(mA)程度とする。
 (a)RaspberryPiの出力電圧 3.3(V)
 (b)LED順方向電圧 2.0(V)
 (c)LED電流  4(mA)
 LED直列抵抗 = ( 3.3(V)-2.0(V) )/ 4(mA) ≒ 0.33(kΩ) 
直列抵抗を0.33(kΩ)とする.。
テストで使用するのは ピンNo11(GPIO=17)とGNDを使用する。
LEDの点滅周期は1(秒)で作成する。

■プログラム

初めてのPythonプログラミングの注意点
 import 〇〇 とfrom 〇〇 import △△の違いは〇〇の中に△△の関数や関数の集合体が含まれている場合に 〇〇全てをインポートするとメモリー等に〇〇全てが読込まれるため from を使って使用するメモリーを少なくすることが出来る。
 while やif文について 複数のプログラムが入る場合は、ブログラムを同じX軸位置にそろえる。

■テスト状況写真とプログラムを実行した結果 
   プログラムを実行する時はThonny(右上)[Run]をクリック、停止は[Stop]をクリック
 [目次へ戻る]

(2)入力 
テストで使用するのは ピンNo11(GPIO=17)とGNDを使用しその間にスイッチを入れる。
■プログラム

初めてのPythonプログラミングの注意点
時間型 nw = datetime.datetime.now() を
文字型へ変換 nw.strftime('%Y/%m/%d %H:%M:%S')+" = "+str(pv) ) 

■テスト状況写真とプログラムを実行した結果 

スイッチを閉じると出力は 1 解放すると 0 になる
 [目次へ戻る]

(3)DS18B20 1ワイヤー 温度リレー制御
■接続方法
  RaspberrPi I/Oの事前設定  DS18B20ハード Arduinoプログラム例
 デフォルトピンはGPIO=4 PinNo=7
 電源電圧3.0~5.5(V)
■PinNoの変更方法
 /boot/config.txt の
[all]
dtoverlay=w1-gpio
 GPIO4をGPIO17へ変更する場合
[all]
dtoverlay=w1-gpio,gpiopin=17
 に変更する。

■プログラム


■テスト状況写真とプログラムを実行した結果 
  [目次へ戻る]


2.PythonでI2Cディバイスのコントロール
(1)i2cディバイスの接続
  例:ADS1115との接続 
    RaspberrPi I/Oの事前設定  ADS1115ハード Arduinoプログラム例
RaspberryPi. と ADS1115側接続  +3V(灰色) I2Cプルアップ抵抗 Vdd(紫) GND(青) SCL(緑) SDA(黄)
 RaspberryPi側の端子
 今回使用したPin 〇番号と配線色は
 ①3.3V(灰)
 ②5.5V(紫)
 ③SDA1(黄).
 ⑤SCL1(緑)
 ⑥GND(青)
 で接続している。
  [目次へ戻る]

(2)モジュールsmbusでi2cのプログラム例
下図の例はADS1115のA0データを取得するプログラムを実行したものです。

  [目次へ戻る]

(3)ADS1115 A/D変換器使用例
    RaspberrPi I/Oの事前設定  ADS1115ハード Arduinoプログラム例
■プログラム

 ADS1115のデータ書込みと読込みの間に少なくとも0.3msの待ち時間を入れる事。
  time.sleep(0.001)≒1msの待ちを入れている。
 時間待ちのtimeは標準ライブラリーで無いので timeモジュールをimportすること。

初めてのPythonプログラミングの注意点


■テスト状況写真とA3に4(V)を入力した結果
  [目次へ戻る]

(4)INA226 電圧電流測定例
    RaspberrPi I/Oの事前設定    INA226ハード Arduinoプログラム例
■接続確認
 i2cdetect -y 1で接続しているデバイスNo(INA226は44h)を表示させる。
  
  接続がOKのようだ。

■プログラム

初めてのPythonプログラミングの注意点
i2c.write_i2c_block_data(addr, INA226_CONFIG, config)
 上記コマンドの中の config のデータは16進数で表すと 0x45FF なのだが i2c.write_i2c_block_data( ) のconfigは配列データで複数Byteデータはリトルエンディアン(最下位のバイト(LSB:Least Significant Bite)から順番に並べる)を使用しているので 0xFF , 0x45 で配列に入れるので注意!

■テスト状況写真と電圧に5(V)を電流には 7.5(mV) = 10(A) 入力した結果
  [目次へ戻る]


(5)BME280 気温。湿度、大気圧使用例
    RaspberrPi I/Oの事前設定   BME280ハード Arduinoプログラム例
■接続確認
 i2cdetect -y 1で接続しているデバイスNo(BME280は76h)を表示させる。
  
  接続がOKのようだ。

■プログラム

初めてのPythonプログラミングの注意点
サブルーチンを使用する場合はメインプログラムの上段に記載すること。
サブルーチンの複数返し引数の一例として read_DataTPH を確認する事

■テスト状況写真とプログラムを実行した結果
  [目次へ戻る]


(6)BH1750 照度使用例
    RaspberrPi I/Oの事前設定   BH1750ハード Arduinoプログラム例
■接続確認
 i2cdetect -y 1で接続しているデバイスNo(BH1750は23h)を表示させる。
  
  接続がOKのようだ。

■プログラム

初めてのPythonプログラミングの注意点

■テスト状況写真とプログラムを実行した結果

  [目次へ戻る]

(7)DS3231 時計使用例
    RaspberrPi I/Oの事前設定   DS3231ハード Arduinoプログラム例
■接続確認
 i2cdetect -y 1で接続しているデバイスNo(DS3231は68h)を表示させる。
  内蔵のEEPROMのアドレスは57h。
  
  接続がOKのようだ。

■プログラム

初めてのPythonプログラミングの注意点

■テスト状況写真とプログラムを実行した結果
   
  [目次へ戻る]

(8)SSD1306 モニター使用例
    RaspberrPi I/Oの事前設定   SSD1306ハード Arduinoプログラム例
■接続確認
 i2cdetect -y 1で接続しているデバイスNo(SSD1306は3Ch)を表示させる。
  
  接続がOKのようだ。

■Python用のモジュールをインストールする。
SSD1306はフォントデータなど多くのプログラムが必要となるため、専用のモジュールを使用する
パッケージをインストールするときはターミナルから下記の様に入力し改行する。
tryday@tryday:~ $ sudo pip3 install adafruit-circuitpython-ssd1306
tryday@tryday:~ $
上記パッケージを削除したい時は
tryday@tryday:~ $ sudo pip3 uninstall adafruit-circuitpython-ssd1306
と入力し改行する。

■プログラム


■関数一覧
可否 関数 内    容
poweroff() ディスプレイの電源オフ、ピクセルはメモリに残存
poweron() ディスプレイの電源オン、ピクセルを再描画
contrast(0) 暗くする
contrast(255) 明るくする
invert(1) 反転
invert(0) 通常表示
rotate(1) 0度回転
rotate(0) 180度回転
show() FrameBuffer の内容をディスプレイメモリに書き出す
fill(0) スクリーン全体を colour=0 で埋める
image(image) イメージをFrameBuffer に書き込み
width  
height  

初めてのPythonプログラミングの注意点

■テスト状況写真とプログラムを実行した結果   結果はDS1306に表示される。
  [目次へ戻る]


3.Pythonでシリアル通信機器のコントロール
(1)RS232C


  [目次へ戻る]


4.PythonでModBus機器のコントロール


  [目次へ戻る]


5.PythonでMySQLのコントロール


  [目次へ戻る]


6.PythonでHTMLのコントロール


  [目次へ戻る]


7.Pythonでmailのコントロール


  [目次へ戻る]